
const gloabalConstance = require('../const/globalConstance.json')
const {OPTIONS_ABBREVIATION_MAP} = gloabalConstance
// 解析出所有options和params
const optonsAndParams = []

// 解析options
const parseOption = function (item) {
  if (item.startsWith('--')) {
    const optionName = item.replace('--','')
    if (!optionName) {
      throw new Error('配置选项不能为空')
    }
    if (OPTIONS_ABBREVIATION_MAP[optionName]) {
      return OPTIONS_ABBREVIATION_MAP[optionName]
    } else {
      return optionName
    }
  } else if (item.startsWith('-')) {
    const optionName = item.replace('-','')
    if (!optionName) {
      throw new Error('配置选项不能为空')
    }
    return optionName
  } else {
    return false
  }
}

// 解析参数
const parseParams = function (args) {
  // 获取从头开始获取连续的不为options的内容
  console.log('解析参数',args)
  const params = []
  const firstArg = args[0]
  if (!firstArg) {
    return params
  }
  for (item of args) {
    if (parseOption(item)) {
      return params
    } else {
      params.push(item)
    }
  }
  return params
}

const skipStack = []

const parse = function (args) {
  args.forEach(
    (item, index) => {
      if (skipStack.pop()) {
        return
      }
      const option = parseOption(item)
      if (option) {
        // 判断是否有参数
        const params = parseParams(args.slice(index + 1))
        if (params) {
          optonsAndParams.push({option, params})
        } else {
          optonsAndParams.push({option})
        }
        skipStack.push(...params)
      } else {
        const params = parseParams(args.slice(index))
        if (params.length > 0) {
            optonsAndParams.push({ params })
            skipStack.push(...params.slice(1))
        }
      }
    }
  )

  return optonsAndParams
}

module.exports = {
  parse,
  parseParams,
  parseOption
}


